package typeinfo;

//: typeinfo/Shapes.java
import java.util.*;

abstract class Shape {
  void draw() { System.out.println(this + ".draw()"); }
  abstract public String toString();
}

class Circle extends Shape {
  public String toString() { return "Circle"; }
}

class Square extends Shape {
  public String toString() { return "Square"; }
}

class Triangle extends Shape {
  public String toString() { return "Triangle"; }
}	

class Rhombus extends Shape{

	public String toString() {
		return"Rhombus";
	}
	
}

public class Shapes {
  public static void main(String[] args) {
    List<Shape> shapeList = Arrays.asList(
      new Circle(), new Square(), new Triangle()
    );
    for(Shape shape : shapeList)
      shape.draw();
    
    Shape shape2 = new Rhombus();
    System.out.println((Shape)shape2);
    System.out.println((Rhombus)shape2);
   // System.out.println((Triangle)shape2);
    char[] charArr = new char[]{'a','b'};
    System.out.println(charArr.getClass());
    System.out.println(char.class);
  }
  
} /* Output:
Circle.draw()
Square.draw()
Triangle.draw()
*///:~
